Conexión al Web Service de Amarilo
La constructora Amarilo posee un Web Service en el cual almacena la información acerca de sus proyectos y eventos de publicidad. Adicionalmente, este Web Service provee un servicio de envío de información de los clientes interesados en los servicios de Amarilo. Este servicio de recolección de clientes puede ser consumido mediante el motor de video juegos Unity 3D usando el lenguaje C#. Implementación El Web Service de Amarilo puede consumirse de dos maneras: Enviar infromación de clientes y solicitar los datos de eventos y proyectos. A continuación se explica la implementación de ambos servicios utilizando C#. Envío de Clientes Para enviar los datos de clientes al Web Service se debe crear una forma de envío y agregar los campos con el nombre del campo y el valor del campo para ser recibidos. Una vez se halla recolectado los datos del usuario se puede hacer el envio al Web Service de Amarilo. Para hacer el envio de datos se debe crear una Forma usando la clase WWWForm de Unity y posteriormente agregar los campos con el nombre de los campos y sus valores. private string URL = "http://gch.amarilo.com:8088/asw/tools/clipoStand/addClipo.php"; IEnumerator SendPostRequest(string identificacion, string nombres, string apellidos, string email, string celular, string medio, string fecha, string puntoRecoleccion, string ciudad, string proyecto, string idEvento, string observaciones, int aceptSMS, int aceptEmail){ WWWForm form = new WWWForm(); // Add the fields required by the Web Service form.AddField("identificacion", identificacion); form.AddField("nombres", nombres, System.Text.Encoding.Default); form.AddField("apellidos", apellidos, System.Text.Encoding.Default); form.AddField("email", email, System.Text.Encoding.Default); form.AddField("celular", celular); form.AddField("medio", medio, System.Text.Encoding.Default); form.AddField("fecha", fecha); form.AddField("puntoRecoleccion", puntoRecoleccion, System.Text.Encoding.Default); form.AddField("direccion", direccion, System.Text.Encoding.Default); form.AddField("ciudad", ciudad, System.Text.Encoding.Default); form.AddField("proyecto", proyecto, System.Text.Encoding.Default); form.AddField("idEvento", idEvento); form.AddField("observaciones", observaciones); form.AddField("autorizaSms", aceptSMS); form.AddField("autorizaEmail", aceptEmail); // Create the Form Object WWW www = new WWW(URL, form); // Send the Request and Wait for response yield return www; // Analize the response for errors. if (www.error null) { // www.text have the code of the response. "Se guardo el registro" For Request Succesful. Debug.Log("Server Responds: " + www.text); } else { Debug.Log("WWW Error: " + www.error); } } Links Importantes Lo siguientes links son necesarios para el envío y testing de las aplicaciones que se conectan con el Web Service de Amarilo. *Link de envío: Este link es usado para crear una instancia del objeto WWW en C# y es la dirección del Web Service de Amarilo para envíos. http://gch.amarilo.com:8088/asw/tools/clipoStand/addClipo.php *Link de verificiación. En este link se muestra una tabla con todos los clientes que han sido enviados y aceptados por le Web Service de Amarilo. En esta tabla se puede verificar si los envíos fueron exitosos. http://gch.amarilo.com:8088/asw/tools/clipoStand/testClipo.php Observaciones Importantes de Envio Es importante tener en cuenta las siguientes condiciones, ya que no suelen ser muy claras por los documentos enviados por Amarilo. *Si se envían dos clientes con el mismo número de identificación, los resultados del envío usando el objeto WWW devolverá "Se guardo el registro", como si fuera aceptado por el servidor, pero no será mostrado en la tabla de pruebas. *Para que el servidor reciba los campos "proyecto" y "idEvento" deben ser enviados sus códigos, los cuales son descargados por la aplicación de amarilo. Lectura de Datos Para realizar la lectura de datos desde el Web Service de Amarilo se debe realizar un llamado al servidor usando un archivo XML definido. Lastimosamente este proceso no puede ser desarrollado en C#, por lo que se desarrolló una aplicación utilizando C++, la cual puede ser ejecutada desde Unity para posteriormente leer los archivos generados con la información descargada desde el servidor. La aplicación de Amarilo consta de los siguientes archivos que deben ser ubicados en la misma carpeta dentro del proyecto. Para ejecutar la aplicación se puede usar la siguiente Co-rutina en Unity usando C#. IEnumerator ExecuteFileAndWait() { string _applicationPath = Application.dataPath; string paramFileName = _applicationPath + "\\YourFolderName\\WebServiceAmarilo.exe"; string param1 = "\"" + _applicationPath + "\\YourFolderName\\proyectosRequest.xml" + "\""; string param2 = "\"" + _applicationPath + "\\YourFolderName" + "\""; string param3 = "\"" + _applicationPath + "\\YourFolderName\\eventosRequest.xml" + "\""; string param4 = "\"" + _applicationPath + "\\YourFolderName" + "\""; string param5 = "\"" + _applicationPath + "\\YourFolderName\\webService.log" + "\""; Process foo = new Process(); foo.StartInfo.FileName = paramFileName; foo.StartInfo.Arguments = param1 + " " + param2 + " " + param3 + " " + param4 + " " + param5; foo.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; foo.Start(); yield return new WaitForSeconds(5.0f); } Al momento de implementar, Cambie el nombre YourFolderName por el nombre de la carpeta que contiene el ejecutable. Observaciones a tener en cuenta * La aplicación ejecutable de Amarilo lanzará un error de Archivo no encontrado si la carpeta que contiene el compilado de Unity tiene un nombre que contenga espacios en blanco. * Si se desea guardar información generada dentro de la aplicación en formato XML se recomienda utilizar las guias de este link (http://wiki.unity3d.com/index.php?title=Saving_and_Loading_Data:_XmlSerializer). Tener en cuenta que este metodo requiere los archivos dll "I18N.dll" y "I18N.West.dll", los cuales Unity los utiliza en el editor pero no los incluye en la Build. Para solucionar este problema copie estos archivos de la carpeta "Unity\Editor\Data\Mono\lib\mono\unity" a la carpeta "Managed" de la aplicación compilada. Category:Networking Category:WebService Category:Amarilo